package br.unirio.ticketnator.action;

//import static br.unirio.ticketnator.action.ComponenteService.TAMANHO_PAGINA;
import java.util.Map;

import org.apache.struts2.interceptor.RequestAware;

import br.unirio.ticketnator.dao.DAOFactory;
import br.unirio.ticketnator.model.Componente;
//import static com.opensymphony.xwork2.Action.INPUT;
//import static com.opensymphony.xwork2.Action.SUCCESS;
import com.opensymphony.xwork2.ActionContext;

import com.opensymphony.xwork2.ActionSupport;


public class ComponenteService extends ActionSupport implements RequestAware {
	
	private static final long serialVersionUID = -44436774868684L;
	
	public static final int TAMANHO_PAGINA = 25;
	
	private Map request;
	private int currentId;
	private int currentPage;
        
    private String componente;
    private String email;
    private int sistemaPertencente;
    
    public int getSistemaPertencente() {
		return sistemaPertencente;
	}
    
    public void setSistemaPertencente(int sistemaPertencente) {
		this.sistemaPertencente = sistemaPertencente;
	}
    
    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getComponente() {
        return componente;
    }

    public void setComponente(String componente) {
        this.componente = componente;
    }
	
	/**
	 * Inicializa o servico de manipulacao de componentes.
	 */
	
	public ComponenteService()
	{
		this.currentId = -1;
		this.currentPage = 0;
        request = ActionContext.getContext().getSession();
	}
	
	/**
	 * Indica a memoria de requisicao para a acao.
	 */
	@Override
	public void setRequest(Map<String, Object> arg0)
	{
		this.request = arg0;	
	}
	
	/**
	 * "Setta" o id de um componente
	 */
	public void setId(int id)
	{
		this.currentId = id;
	}
	
	public void setPage (int pagina)
	{
		this.currentPage = pagina;
	}
	
	/**
	 *  Determina se existe uma pagina anterior
	 */
	
	public boolean hasPreviousPage()
	{
		return currentPage > 0;
	}
	
	/**
	 * Retorna a pagina anterior
	 */
	
	public int getPreviousPage()
	{
		return hasPreviousPage() ? currentPage-1 :0;
	}
	
	/**
	 * Verifica a existencia de uma proxima pagina
	 */
	
	public boolean hasNextPage()
	{
		int contador = DAOFactory.getComponenteDAO().conta();
		return contador > (currentPage + 1) * TAMANHO_PAGINA;
	}
	
	/**
	 * Retorna a proxima pagina
	 */
	
	public int getNextPage()
	{
		return hasNextPage() ? currentPage + 1 : currentPage;
	}
	
	/**
	 * Cria um Componente
	 */
	public String criaComponente()
	{
		request.put("compoente", new Componente());
		return INPUT;
	}
	
	/**
	 * Edita um componente
	 */
	
	public String editaComponente()
	{
		request.put("componente", DAOFactory.getComponenteDAO().getComponente(currentId));
		return INPUT;
	}
	
	/**
	 * Deleta componente
	 */
	
	public String deletaComponente ()
	{
		DAOFactory.getComponenteDAO().removeComponenteDAO(currentId);
		return SUCCESS;
	}
	
	/** 
	 * Salva as alteracoes do componente que foi editado
	 */
	
	public String salvaComponente()
	{
		Componente c = new Componente();
        c.setNomeComponente(componente);
        c.setEmailOperadorCriacao(email);
        c.setSistemaPertencente(sistemaPertencente);
        
		request.put("componente", c);
		
		//TODO VALIDACOES PARA COMPONENTE
		
		if(c.getIdComponente() <= 0)
			DAOFactory.getComponenteDAO().insereComponenteDAO(c);
		else
			DAOFactory.getComponenteDAO().atualizaComponenteDAO(c);
		
		return SUCCESS;	
	}

}
